home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 361 / simple.trp < prev    next >
Text File  |  1998-08-24  |  4KB  |  140 lines

  1. SIMPLE - A very simple TurboRisk program
  2.  
  3. Purpose of this program is to demonstrate how to code a computer-player in
  4. TurboRisk. As simplicity was the main goal, the resulting strategy is very
  5. weak.
  6.  
  7.  
  8. procedure Assignment;
  9. var
  10.   T: integer;
  11. begin
  12.   // find first free territory (a very stupid way to start the game!)
  13.   ToTerritory:=0;
  14.   T:=1;
  15.   repeat
  16.     if TOwner(T)=0 then
  17.       ToTerritory:=T;
  18.     T:=T+1;
  19.   until (ToTerritory>0) or (T>42);
  20. end;
  21.  
  22. procedure Placement;
  23. var
  24.   T: integer;
  25.   Ratio,MaxRatio: double;
  26. begin
  27.   // reinforce territory with greatest ratio between total enemy armies and
  28.   // own armies
  29.   ToTerritory:=0;
  30.   MaxRatio:=0;
  31.   for T:=1 to 42 do begin
  32.     if TIsFront(T) then begin  // territory is mine and front
  33.       Ratio := TPressure(T) / TArmies(T);
  34.       if Ratio>MaxRatio then begin
  35.         ToTerritory:=T;
  36.         MaxRatio:=Ratio;
  37.       end;
  38.     end;
  39.   end;
  40. end;
  41.  
  42. procedure Attack;
  43. var
  44.   T,EnemyT,EnemyA: integer;
  45.   Ratio,MaxRatio: double;
  46. begin
  47.   // perform attack with best chances; stop after 1 conquest;
  48.   FromTerritory:=0;
  49.   ToTerritory:=0;
  50.   if not SConquest then begin  // still no conquest
  51.     MaxRatio:=0;
  52.     for T:=1 to 42 do begin
  53.       if TIsFront(T)                      // territory is mine and front
  54.       and (TArmies(T)>1) then begin       // attack is possible
  55.         TWeakestFront(T,EnemyT,EnemyA);
  56.         Ratio := TArmies(T) / EnemyA;
  57.         if Ratio>MaxRatio then begin
  58.           FromTerritory:=T;
  59.           ToTerritory:=EnemyT;
  60.           MaxRatio:=Ratio;
  61.         end;
  62.       end;
  63.     end;
  64.   end;
  65. end;
  66.  
  67. procedure Occupation;
  68. var
  69.   FromIsFront, ToIsFront: boolean;
  70. begin
  71.   // very simple but effective routine
  72.  
  73.   FromIsFront := TIsFront(FromTerritory);
  74.   ToIsFront := TIsFront(ToTerritory);
  75.   Armies:=0;
  76.  
  77.   // if both territories are 'front'
  78.   if  FromIsFront and ToIsFront then begin
  79.     // balance armies
  80.     Armies:=(TArmies(FromTerritory)-TArmies(ToTerritory)) div 2;
  81.  
  82.   // if "From" territory is front
  83.   end else if FromisFront then begin
  84.     // all armies stay in From territory, so there's nothing to do
  85.  
  86.   // in the other cases
  87.   end else begin
  88.     // all armies in the conquered territory (except one which must stay)
  89.     Armies:=TArmies(FromTerritory)-1;
  90.   end;
  91. end;
  92.  
  93. procedure Fortification;
  94. var
  95.   T,B,MaxArmy: integer;
  96. begin
  97.   FromTerritory:=0;
  98.   ToTerritory:=0;
  99.   Armies:=0;
  100.  
  101.   // look for the greatest nuber of armies which is not on a front territory
  102.   MaxArmy := 1;
  103.   for T:=1 to 42 do begin
  104.     if TIsMine(T) and not TIsFront(T) then begin  // territory is mine and not "front"
  105.       if TArmies(T)>MaxArmy then begin
  106.         MaxArmy := TArmies(T);
  107.         FromTerritory := T;
  108.       end;
  109.     end;
  110.   end;
  111.   // if there are armies to move...
  112.   if FromTerritory>0 then begin
  113.     // check if can move armies to front...
  114.     for B:=1 to TBordersCount(FromTerritory) do begin
  115.       if ToTerritory=0 then begin
  116.         T:=TBorder(FromTerritory,B);
  117.         if TIsMine(T) and TIsFront(T) then begin
  118.           ToTerritory:=T;
  119.         end;
  120.       end;
  121.     end;
  122.     // otherwise move armies in the first bordering territory
  123.     if ToTerritory=0 then begin
  124.       for B:=1 to TBordersCount(FromTerritory) do begin
  125.         if ToTerritory=0 then begin
  126.           T:=TBorder(FromTerritory,B);
  127.           if TIsMine(T) then begin
  128.             ToTerritory:=T;
  129.           end;
  130.         end;
  131.       end;
  132.     end;
  133.     // Move all armies to destination (except the one which must stay)
  134.     if ToTerritory>0 then begin
  135.       Armies:=TArmies(FromTerritory)-1;
  136.     end;
  137.   end;
  138. end;
  139.  
  140.